#ifndef SYSTEMMAINWINDOW_H
#define SYSTEMMAINWINDOW_H

#include <QWidget>
#include <QMessageBox>
#include <memory>

//json解析
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <QJsonParseError>

#include <functional>

//网络通信TCP Server
#include "netset.h"

//存储历史数据
#include "savedata.h"

namespace Ui {
class SysTemMainWindow;
}

class SysTemMainWindow : public QWidget
{
    Q_OBJECT

public:
    explicit SysTemMainWindow(QWidget *parent = 0);
    ~SysTemMainWindow();


private:
    void initWindow(void);

    //读取配置文件获取ip及端口号及json解析，组包键
    QString initReadConfig(void);

    //解析上传数据的信息，对不同键的值设置窗口
    QString setWeight(QString info);
    QString setFiveTemperature(QString info);
    QString setOpenHeater(QString info);
    QString setOpenValve(QString info);
    QString setPushbeamHeight(QString info);
    QString setMotorRpm(QString info);
    QString setStovePower(QString info);

private slots:
    void netListenDefeat(QAbstractSocket::SocketError socketError);

    void netConnect(void);

    void netDisconnect(void);

    void mainRecvNetJsonHandler(QString info);

    void on_confirmButton_clicked();

    void saveDataOpenFileDefeat(QFile::FileError error);

signals:
    void mainWindowSendNetCon(void);

    void mainSendControlNet(QString info);

    void mainSaveData(QString info);

private:
    Ui::SysTemMainWindow *ui;

    NetSet * net = nullptr;

    QString packType;
    QStringList keyUpdata;
    QStringList keyControl;
    QStringList keyRecvControl;

    std::function<QString(QString)> func[7];

    std::unique_ptr<SaveData> dataPtr;
};

#endif // SYSTEMMAINWINDOW_H
